#ifndef __UARTTOUART_H__
#define __UARTTOUART_H__

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

// 初始化UART5和UART2（如有需要）
void UARTToUART_Init(void);
// 从UART5接收数据并通过UART2打印
void UART5_ForwardToUART2(uint8_t ch);
// 测试UART5配置是否正确
int UART5_TestConfig(void);
// 从UART5接收一行数据，包含超时和错误处理
int UART5_ReceiveLine(char *buffer, int max_len, uint32_t timeout_ms);
// 快速接收UART5数据，减少处理延迟
int UART5_FastReceiveLine(char *buffer, int max_len, uint32_t timeout_ms);
// 专门用于处理ERR格式数据的快速接收函数
int UART5_ReceiveERRData(char *buffer, int max_len, uint32_t timeout_ms);
// 从UART5接收单个字符，带超时
int UART5_ReceiveChar(char *ch, uint32_t timeout_ms);
// 测试UART5字符接收，逐个字符接收并打印
int UART5_TestCharReceive(uint32_t timeout_ms);
// 原始UART5接收测试，使用最基本的轮询方式
int UART5_RawReceiveTest(void);
// 快速UART5接收测试
int UART5_FastReceiveTest(void);
// 测试ERR格式数据接收
int UART5_TestERRReceive(void);
// 解析ERR格式数据
bool UART5_ParseERRData(const char* buffer, int* id, float* err_x, float* err_y, float* err_theta);
// 简化的ERR数据接收和处理函数
bool UART5_ReceiveAndParseERR(int* id, float* err_x, float* err_y, float* err_theta, uint32_t timeout_ms);
// UART5异步中断接收初始化
void UART5_AsyncInit(void);
// 供主循环调用，处理接收缓冲区数据
void UART5_ProcessReceivedData(void);
// UART5接收数据并用UART2打印输出
void UART5_ReceiveAndPrintToUART2(void);

#ifdef __cplusplus
}
#endif

#endif // __UARTTOUART_H__ 